<?php
class AppController extends Controller
{
	var $uses = array('Menu','AclExtended');
	//var $components = array('Session', 'Locale','DebugKit.Toolbar');
	var $components = array('Session', 'Locale');
	var $helpers = array('Html','Form','Javascript','Counter', 'Wysiwyg','Session');
	
	//var $helpers = array('Html','Form','Javascript');
	var $available_langs = array(
		'en','vi','eng','vie'
	);

	function beforeFilter(){
		$this->Locale->startup($this);
		$this->Locale->process();

		// Kiểm tra quyền
		$this->checkAuth();
		// Lưu thông tin của người dùng
		$this->my_id = null;
		$this->user_id = null;
		
		$this->user = null;
		$this->username = __("Khách", true);
		if ($this->Session->check('user.info')) {
			$this->user = $this->Session->read('user.info');
			$this->user = $this->user['User'];
			
			$this->username = $this->user['username'];
			$this->my_id = $this->user['id'];
			$this->user_id = $this->user['id'];
		}
		
		$this->set('my_username', $this->username);
		$this->set('logedUser', $this->user);
		
        $cart = $this->Session->read('cart');
        if( empty($cart) )
        {                
            $cart = array(
                'total' => 0,
                'items' => array(                   
                )
             );
             $this->Session->write('cart',$cart);             
        }
		
	}
	
	/*
	 * Phương thức được sử dụng để kiểm tra quyền truy cập của người dùng
	 * */
	function checkAuth(){
		
		$configs = $this->AclExtended->loadConfig();
		if (!$this->Session->read('user_id') && !$this->AclExtended->checkAuth($this->params, $configs)) {
			// Create params for redirect
			$params = array(
				'plugin'		=>	$this->params['plugin'],
				'controller'	=>	$this->params['controller'],
				'action'		=>	$this->params['action'],
			) + $this->params['pass'] + $this->params['named'];
			$this->Session->write('redirect_url', $params);
			$this->redirect('/login'); 
		} else {
			return true;
		}
	}
	
	/*
	 * Phương thức được sử dụng để lưu lỗi khi có lỗi xảy ra trên Form, được sử dụng cho chức năng báo lỗi
	 * */
	function __setError($modelName) {
		$this->Session->write("{$modelName}.invalidFields", $this->{$modelName}->invalidFields());
		$this->Session->write("{$modelName}.data", $this->data);
	}
	
	/*
	 * Phương thức được sử dụng để kiểm tra lỗi của form và lưu lỗi đó vào hệ thống báo lỗi
	 * */
	function __checkError($modelName) {
		$hasError = false;
		if ($this->Session->check("{$modelName}.data")) {
			if (isset($this->data)) {
				$oldData = $this->data;
			}
			$this->data = $this->Session->read("{$modelName}.data");
			
			// Override old data by user input data
			if (isset($oldData)) {
				foreach ($this->data[$modelName] as $key => $val) {
					$oldData[$modelName][$key] = $val;
				}
				$this->data = $oldData;
			}
			
			$hasError = true;
			$this->Session->delete("{$modelName}.data");
		}
		if ($this->Session->check("{$modelName}.invalidFields")) {
			$invalidFields = $this->Session->read("{$modelName}.invalidFields");
			$hasError = true;
			$this->Session->delete("{$modelName}.invalidFields");
			foreach ($invalidFields as $key => $value) {
				$this->{$modelName}->invalidate($key, $value);
			}
		}
		
		return $hasError;
	}
	
	function beforeRender() {
		if (!empty($this->configs['Themes'])) {
			$this->view = 'Theme';
			if (isset($this->configs['Themes'][$this->params['controller']])) {
				$this->theme = $this->configs['Themes'][$this->params['controller']];
			}
		}
	}
}
?>
